home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
shadowlib.lha
/
shadow
/
Examples
/
Source
/
gui.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-11-13
|
10KB
|
347 lines
/*
* COPYRIGHT: 1992 David C. Navas *
* License granted to SwRI to modify and use as per site *
* license. Further distribution license rights granted *
* upon receipt of agreed upon compensation. *
* All Other Rights Reserved by Author *
*/
#ifndef SHADOW_GUI_H
#define SHADOW_GUI_H
#include <exec/exec.h>
#include <intuition/intuition.h>
#include <libraries/gadtools.h>
#include <shadow/watcher.h>
#include <pragmas/exec_pragmas.h>
#include <pragmas/dos_pragmas.h>
#include <pragmas/intuition_pragmas.h>
#include <pragmas/gadtools_pragmas.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
/*
* ==========================================================================
* = =
* = Class definition for the GUI process. =
* = =
* ==========================================================================
*/
#ifndef GUIPROCESS_CLASS
#define GUIPROCESS_CLASS "gui process class"
#endif
#ifndef ASLPROCESS_CLASS
#define ASLPROCESS_CLASS "asl process class"
#endif
#ifndef GUITASK
#define GUITASK "Gui Task\0"
#endif
#define ATTR_GUIPROCESS "shared window port\0"
struct GuiProcess {
struct MsgPort *guip_port;
};
void HandleIntuiMessage(struct IntuiMessage *intui);
void GUIThreadStart(void);
/*
* ==========================================================================
* = =
* = Class definition for GUI type of objects. =
* = =
* ==========================================================================
*/
#ifndef GUI_CLASS
#define GUI_CLASS "gui class"
#endif
#define ATTR_GUICHILDREN "gui children\0"
#define ATTR_GUISTRUCT "gui struct\0"
struct GUIStruct {
OBJECT gui_parent;
char *gui_moniker;
};
#define ATTR_GUIOUTPUT "gui output\0"
struct OutputStruct {
OBJECT out_object;
char *out_method;
};
extern ARGUMENT_TAG REF_GuiInitMethod[];
void *GuiInitMethod(METHOD_ARGS, OBJECT parent,
char *name,
OBJECT out_object,
char *out_method);
void GuiRemoveMethod(METHOD_ARGS);
void GuiDestroyMethod(METHOD_ARGS);
/*
* The following are responsible for these:
* a) Setting the focus object.
* b) notification of state change.
*/
#define METH_GUI_RESIZE "Resize Gui Element"
#define METH_GUI_FOCUS "Grab Focus"
extern ARGUMENT_TAG REF_GuiGrabFocus[];
void GuiGrabFocus(METHOD_ARGS, long flag);
struct GuiIntuiHeader {
/* the Class bits correspond directly with the IDCMP Flags, except for the
* special bit LONELYMESSAGE (defined below)
*/
ULONG gih_Class;
/* the Code field is for special values like MENU number */
USHORT gih_Code;
/* the Qualifier field is a copy of the current InputEvent's Qualifier */
USHORT gih_Qualifier;
};
struct GuiIntuiMouse {
/* when getting mouse movement reports, any event you get will have the
* the mouse coordinates in these variables. the coordinates are relative
* to the upper-left corner of your Window (GIMMEZEROZERO notwithstanding)
*/
SHORT gim_MouseX,
gim_MouseY;
};
struct GuiIntuiTime {
/* the time values are copies of the current system clock time. Micros
* are in units of microseconds, Seconds in seconds.
*/
ULONG gii_Seconds, gii_Micros;
};
struct GuiIntuiMsg {
struct GuiIntuiHeader gii_header;
#define gii_Class gii_header.gih_Class
#define gii_Code gii_header.gih_Code
#define gii_Qualifier gii_header.gih_Qualifier
/* IAddress contains particular addresses for Intuition functions, like
* the pointer to the Gadget or the Screen
* This is likely to be meaningless.... Particularly when sent
* Asynchronously. subclassed methods should always be called!
*/
APTR gii_IAddress;
struct GuiIntuiMouse gii_mouse;
#define gii_MouseX gii_mouse.gim_MouseX
#define gii_MouseY gii_mouse.gim_MouseY
struct GuiIntuiTime gii_time;
#define gii_Seconds gii_time.git_Seconds
#define gii_Micros gii_time.git_Micros
};
#define METH_GUI_STATE "Intuition update"
extern ARGUMENT_TAG REF_GuiStateNotify[];
void GuiStateNotify(METHOD_ARGS, struct GuiIntuiMsg *info, OBJECT window);
/*
* ==========================================================================
* = =
* = Class definition for window objects. =
* = =
* ==========================================================================
*/
#ifndef WINDOW_CLASS
#define WINDOW_CLASS "Window Class\0"
#endif
#define ATTR_WINDOW "window attributes"
struct WindowObject {
struct Window *wo_window;
/*
* Should really be a pointer to a screen Object, but....
*/
struct VisualInfo *wo_vi;
/*
* Will eventually need menus here, too.
*/
struct Gadget *wo_rootGadget, *wo_lastGadget;
struct WindowLocation *wo_wl;
OBJECT wo_wlObject;
char *wo_localWindowName;
};
struct WindowLocation {
long wl_left,
wl_top,
wl_width,
wl_height,
wl_xInc,
wl_yInc,
wl_flags;
/*
* Internal use only all below.
*/
short wl_localLeft,
wl_localTop,
wl_localWidth,
wl_localHeight;
};
/*
* Put in wl_* (not flags) for better control of window overlapping.
*
* PERCENT for top/left/width/height uses the low 16bits as a percentage
* value from screen location.
* BORDER for width/height is used to skip an overlapping window's borders
* UNDERMOUSE for left/top to Open window with left/top as MOUSE coords.
*/
#define WLO_Border 0x10000
#define WLO_Percent 0x20000
#define WLO_UnderMouse 0x40000
/*
* wl_flags
*
* Don't check for window collisions -- used to reopen already opened and
* -repositioned- windows.
*
* Backstore saves the position of the window off -- will reset next window
* Open to Open to the same place. Requires that passed WindowLocation
* structure stay around in the wlObject that is passed to the window INIT
* method.
* Tile[Horiz|Vert] -- better name -- Shingle? Layer?
* NoAuto -- DON'T do any auto-placement.
*/
#define WLO_Backstore 0x1
#define WLO_TileHoriz 0x2
#define WLO_TileVert 0x4
#define WLO_NoAuto 0x8
/*
* Internal flags.
*/
#define WLO_ReTile 0x80000000
#define WLO_ResetVert 0x40000000
#define WLO_ResetHoriz 0x20000000
enum {WLO_Location = TAG_USER + 1};
#define METH_WINDOW_CLOSE METH_REMOVE
#define METH_WINDOW_REFRESH "Method window refresh"
#define METH_WINDOW_PRETITLE "Prepend this string to window title"
#define METH_WINDOW_MOVE "Move Window to position"
#define METH_WINDOW_UPDATE "Update Window default location"
#define METH_GADGET_SELECT "Method gadget select"
extern ARGUMENT_TAG REF_WinOpenMethod[];
void *WinOpenMethod(METHOD_ARGS, OBJECT parent,
char *name,
OBJECT out_object,
char *out_method,
struct TagItem *tags,
OBJECT wlObject);
void WinCloseMethod(METHOD_ARGS);
void WinDestroyMethod(METHOD_ARGS);
/*
* ==========================================================================
* = =
* = Class definition for GADTOOL gadget objects. =
* = =
* ==========================================================================
*/
#ifndef GADGT_CLASS
#define GADGT_CLASS "Gadget GadTool Class\0"
#endif
#define ATTR_GADGET "gadget base offset\0"
struct GadgetObject {
struct Gadget *go_gadget;
};
extern ARGUMENT_TAG REF_GadgTOpenMethod[], REF_GadgTChangeMethod[];
void *GadgTOpenMethod(METHOD_ARGS, OBJECT window,
char *name,
OBJECT out_object,
char *out_method,
struct NewGadget *ng,
long gadType,
struct TagItem *tags);
#define METH_GADGET_CHANGE "Method Change gadtool attrs"
void GadgTChangeMethod(METHOD_ARGS, struct TagItem *tags);
/*
* ==========================================================================
* = =
* = Class definition for ASL objects. =
* = =
* ==========================================================================
*/
#ifndef ASL_CLASS
#define ASL_CLASS "ASL Requester Class"
#endif
#define ATTR_ASLREQUEST "ASL Request ptr"
struct AslRequest {
union {
void *uar_Requester;
struct FileRequester *uar_FileRequester;
struct FontRequester *uar_FontRequester;
} ar_union;
#define ar_Requester ar_union.uar_Requester
#define ar_FileRequester ar_union.uar_FileRequester
#define ar_FontRequester ar_union.uar_FontRequester
USHORT ar_OpenFlag;
OBJECT ar_ParentWindow;
OBJECT ar_LocalWindow;
ULONG ar_gadType;
/*
* for resource tracking.
*/
char *ar_FontName;
char *ar_File;
char *ar_Dir;
char *ar_OKText;
char *ar_CancelText;
};
#define ASL_FLAG_BEGUN 1
#define ASL_FLAG_REMOVE 2
#define METH_ASL_LAUNCH "Method Launch asl requester"
#define METH_ASL_BEGIN "Method Open Requester"
#define METH_ASL_DONE "Method Requester Closed"
BOOL InitGUISystem(void);
#endif